/**
 * 流程图组件类型定义
 */

/**
 * 节点数据接口
 */
export interface FlowNode {
  /** 节点唯一标识 */
  id: string;
  /** 节点标题 */
  title?: string;
  /** 节点描述 */
  description?: string;
  /** 前置节点ID（逗号分隔或数组） */
  preNodeIds?: string | string[];
  /** 后续节点ID（逗号分隔或数组） */
  nextNodeIds?: string | string[];
  /** 自定义数据 */
  data?: Record<string, any>;
  /** 节点类型（用于自定义样式） */
  type?: string;
  /** 节点状态 */
  status?: 'default' | 'success' | 'warning' | 'error' | 'processing';
}

/**
 * 边（连接线）数据接口
 */
export interface FlowEdge {
  /** 边唯一标识 */
  id: string;
  /** 起始节点ID */
  source: string;
  /** 目标节点ID */
  target: string;
  /** 连接类型 */
  type: 'serial' | 'parallel' | 'merge' | 'parallel-merge';
  /** 自定义数据 */
  data?: Record<string, any>;
}

/**
 * 布局后的节点数据
 */
export interface LayoutNode extends FlowNode {
  /** 节点X坐标 */
  x: number;
  /** 节点Y坐标 */
  y: number;
  /** 节点宽度 */
  width: number;
  /** 节点高度 */
  height: number;
  /** 层级 */
  level: number;
  /** 行索引 */
  row: number;
  /** 是否有输入连接 */
  hasInput: boolean;
  /** 是否有输出连接 */
  hasOutput: boolean;
  /** 前置节点ID数组 */
  preNodeIds: string[];
  /** 后续节点ID数组 */
  nextNodeIds: string[];
}

/**
 * 布局后的边数据
 */
export interface LayoutEdge extends FlowEdge {
  /** 起始X坐标 */
  startX: number;
  /** 起始Y坐标 */
  startY: number;
  /** 结束X坐标 */
  endX: number;
  /** 结束Y坐标 */
  endY: number;
}

/**
 * 流程图配置
 */
export interface FlowGraphConfig {
  /** 节点宽度 */
  nodeWidth?: number;
  /** 节点高度 */
  nodeHeight?: number;
  /** 水平间距 */
  horizontalSpacing?: number;
  /** 垂直间距 */
  verticalSpacing?: number;
  /** 画布内边距 */
  padding?: number;
  /** 是否显示图例 */
  showLegend?: boolean;
  /** 是否启用缩放 */
  enableZoom?: boolean;
  /** 是否启用拖拽平移 */
  enablePan?: boolean;
  /** 布局方向 */
  direction?: 'horizontal' | 'vertical';
  /** 自动调整画布大小 */
  autoResize?: boolean;
}

/**
 * 节点点击事件
 */
export interface NodeClickEvent {
  node: LayoutNode;
  event: MouseEvent;
}

/**
 * 边点击事件
 */
export interface EdgeClickEvent {
  edge: LayoutEdge;
  event: MouseEvent;
}

